home *** CD-ROM | disk | FTP | other *** search
/ The Programmer Disk / The Programmer Disk (Microforum).iso / xpro / extra / pro13 / vscreen.c < prev    next >
Text File  |  1993-02-01  |  2KB  |  108 lines

  1. /*
  2.     vscreen.C
  3.  
  4.     Copyright (C) 1993, Geoff Friesen B.Sc.
  5.     All rights reserved.
  6. */
  7.  
  8. #define    INCL_VSCREEN
  9.  
  10. void v_screen (int cmd, int x, int y, int nx, int ny, void *buffer)
  11. {
  12.    int cols;
  13.    char mode, page;
  14.  
  15.    asm push ds
  16.  
  17.    asm mov ah, 15
  18.    VIDEO_INT
  19.  
  20.    asm mov mode, al
  21.    asm mov BYTE PTR cols, ah
  22.    asm mov BYTE PTR cols [1], 0
  23.    asm shl WORD PTR cols, 1
  24.    asm mov page, bh
  25.  
  26.    asm push ds
  27.    asm pop es
  28.  
  29.    asm mov ax, 0b000h
  30.    asm cmp BYTE PTR mode, MONO
  31.    asm jz v_screen0
  32.  
  33.    asm add ah, page
  34.    asm add ah, 8
  35.  
  36. v_screen0:
  37.  
  38.    asm mov si, ax
  39.  
  40.    asm cmp BYTE PTR cmd, 0
  41.    asm jnz v_screen1
  42.  
  43.    asm mov ds, si
  44.    asm sub si, si
  45.    asm mov di, buffer
  46.    asm jmp SHORT v_screen2
  47.  
  48. v_screen1:
  49.  
  50.    asm mov es, si
  51.    asm sub di, di
  52.    asm mov si, buffer
  53.  
  54. v_screen2:
  55.  
  56.    asm mov ax, y
  57.    asm dec ax
  58.    asm mov cx, cols
  59.    asm mul cx
  60.    asm mov cx, x
  61.    asm dec cx
  62.    asm shl cx, 1
  63.    asm add ax, cx
  64.  
  65.    asm cmp BYTE PTR cmd, 0
  66.    asm jnz v_screen3
  67.  
  68.    asm add si, ax
  69.    asm jmp SHORT v_screen4
  70.  
  71. v_screen3:
  72.  
  73.    asm add di, ax
  74.  
  75. v_screen4:
  76.  
  77.    asm mov bx, ny
  78.    asm mov cx, nx
  79.    asm cld
  80.  
  81. v_screen5:
  82.  
  83.    asm rep movsw
  84.  
  85.    asm dec bx
  86.    asm jz v_screen7
  87.  
  88.    asm cmp BYTE PTR cmd, 0
  89.    asm jnz v_screen6
  90.  
  91.    asm sub si, nx
  92.    asm sub si, nx
  93.    asm add si, cols
  94.    asm mov cx, nx
  95.    asm jmp SHORT v_screen5
  96.  
  97. v_screen6:
  98.  
  99.    asm sub di, nx
  100.    asm sub di, nx
  101.    asm add di, cols
  102.    asm mov cx, nx
  103.    asm jmp SHORT v_screen5
  104.  
  105. v_screen7:
  106.  
  107.    asm pop ds
  108. }